#if !defined(__APP_BUFFER_H)
#define __APP_BUFFER_H
#include <pthread.h>

// 缓存区的结构体
typedef struct
{
    char *ptr; // 缓存区数据指针
    int total_size; // 缓存区大小
    int len; // 缓存区已存数据长度
    int offset; // 缓存区数据偏移量
    pthread_mutex_t lock; // 互斥锁
} Buffer;


/**
 * @brief 初始化缓存区
 * @param size 缓存区大小
 * @return 缓存区指针
 */
Buffer *app_buffer_init(int size);

/**
 * @brief 释放缓存区
 * @param buffer 缓存区指针
 * @return void
 */
void app_buffer_free(Buffer *buffer);

/**
 * @brief 向缓存区写入数据
 * @param buffer 缓存区指针
 * @param data 数据指针
 * @param len 数据长度    
 * @return 成功：0（全部写入了）,失败：-1 （有可能是缓存区空间不够了）
 */
int app_buffer_write(Buffer *buffer, char *data, int len);

/**
 * @brief 从缓存区读取数据
 * @param buffer 缓存区指针
 * @param data 存放读取到的数据的容器（一般是数组）
 * @param len 要读取数据的长度
 * @return 成功：0,失败：-1（可能是缓存区的数据长度不够）
 */
int app_buffer_read(Buffer *buffer, char *data, int len);



#endif // __APP_BUFFER_H
